// 提供一种方法顺序一个聚合对象中各个元素，而又不暴露该对象的内部表示。
class Iterator{
    list:any;
    index:any;
    constructor(container){
           this.list = container.list;
           this.index = 0; 
    }
    next(){
        if(this.hasNext()){
            return this.list[this.index++]
        }
        return null
    }

    hasNext(){
        return this.index < this.list.length;
    }
}

class Container {
    constructor(list){
        this.list = list
    }
    getIterator(){
        return new Iterator(this)
    }
}

// 
let container = new Container([1,2,3,4,5,6]);
let iterator = container.getIterator();

while(iterator.hasNext()){
    console.log(iterator.next());
}

// 特点
// 访问一个聚合对象的内容而无需暴露它的内部表示。
// 为遍历不同的集合结构提供一个统一的接口，从而支持同样的算法在不同的集合结构上进行操作

// 总结
// 对于集合内部结果常常变化各异，不想暴露其内部结构的话，但又想让客户代码透明的访问其中的元素，可以使用迭代器模式

 